package com.cj.bus.common.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 自定义线程池配置
 */
@Configuration
@EnableAsync
@Slf4j
public class ExecutorConfig {
    @Bean
    public Executor busAsyncServiceExecutor() {
     log.info("start busAsyncServiceExecutor");
     ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
     //配置核心线程数
     executor.setCorePoolSize(5);
     //配置最大线程数
     executor.setMaxPoolSize(10);
     //配置队列大小
     executor.setQueueCapacity(10);
     //线程达到最大线程数以后如果需要回收时候的最大存活时间 定义5秒
     executor.setKeepAliveSeconds(5);
      //配置线程池中的线程的名称前缀
     executor.setThreadNamePrefix("bus-async-service-");
     // rejection-policy：当pool已经达到max size的时候，加入新的任务 不丢弃
     executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
     //执行初始化
     executor.initialize();
     return executor;

    }


}
